<?php

class AppletController extends AppController
{
	public $name = 'Applet';
	public $helpers = array();
	public $uses = array('Candidate', 'Testing');
	public $modelName = null;

	function beforeFilter()
	{
		parent::beforeFilter();

		$this->modelName = Inflector::singularize($this->name);
		$this->set('modelName', $this->modelName);
	}

	function go($id = null)
	{
        $modelName = $this->modelName;
		Auth::Access('*');
        /**
         * Выходим из системы (нужно для того, чтобы администратор мог посадить кандидата за свой компьютер).
         */
        Auth::logout();

        $mode = (($present_mode = $this->Session->read("applet_ok_present_mode")) && ($present_mode == "completed")) ? "completed" : "go";

        if ($mode == "completed") {
            $this->set("mode", $mode);
            $this->pageTitle = __d('testings', 'testing_is_completed', true);
            $this->Session->delete("applet_ok_present_mode");
        } else {

            $this->pageTitle = __d('testings', 'testing_process_title', true);

            // выборка рабочей testing с помощью переменной $auth, полученной из урла
            // $auth уникально идентифицирует каждый тест
            $auth = null;
            if (isset($this->params['auth'])) {
                $auth = $this->params['auth'];
            }
            if (empty($auth)) {
                $this->_error(404);
                exit;
            }
            $this->set("auth", $auth);
            $this->Testing->rel('Test | Candidate');
            $valid_testing = $this->Testing->findByAuthLink($auth);
            if (empty($valid_testing)) {
                $this->_error(404);
                exit;
            }

            // продолжаем только если тест еще не пройден (статус READY)
            if ($valid_testing['Testing']['pass_status'] == 'READY') {
                $pass = '';
                // пароль берем или из приходящего post, или из сессии (при переходе из админской части по кнопке "Пройти тест")
                if (isset($this->data[$modelName]['pass'])) {
                    $pass = $this->data[$modelName]['pass'];
                } elseif($this->Session->read('applet.pass')) {
                    $pass = $this->Session->read('applet.pass');
                    $this->set("redirect_to_home", true);
                }
                $this->Session->delete('applet.pass');

                // если пароль не установлен, переходим на страницу ввода пароля для теста
                if ($valid_testing['Testing']['password'] != $pass) {
                    if (isset($this->data[$modelName]['pass'])) {
                        $this->msgError(__d(null, 'Please check your password', true), @$error_code);
                    }
                    $this->pageTitle = __d(null, 'Enter password to start test', true);
                    $this->layout = 'default';
                    $this->set("mode", "login");
                } else {
                    $this->Session->write('testing', $valid_testing);
                    // IN_PROGRESS устанавливается после прохождения тестовых заданий

                    $this->set('username', $valid_testing['Candidate']['name']." ".$valid_testing['Candidate']['surname']);
                    $this->set('applet_class_name', $valid_testing['Test']['applet_class_name']);
                    $this->set('testing_hash', $valid_testing['Testing']['auth_link']);

                    $this->layout = 'applet';
                }
            } else {
                $this->msgError(__d(null, 'This test is already completed', true), @$error_code);
                $this->redirect('/');
                exit;
            }
        }
	}
}

?>